package com.hp.gxw.u8.xml;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.hp.gxw.u8.dto.DispatchListParameter;
import com.hp.gxw.u8.dto.DispatchListsParameter;
import com.hp.gxw.utils.DateUtil;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.springframework.stereotype.Component;

@Component
public class DispatchListsXml {

	public static String createXML(DispatchListParameter dispatchListParameter) throws Exception{
		try {
			// 1、创建document对象
			Document document = DocumentHelper.createDocument();
			// 2、创建根节点rss
			Element ufinterface = document.addElement("ufinterface");
			ufinterface.addNamespace("z", "http://www.w3.org/2001/XMLSchema");
			// 向ufinterface节点添加efserverid属性(U8账套)
			ufinterface.addAttribute("efserverid", dispatchListParameter.getEfserverid());
			// 向ufinterface节点添加eftype属性(方法：0412 材料出库单)
			ufinterface.addAttribute("eftype", dispatchListParameter.getEftype());
			// 向ufinterface节点添加proc属性(增删改查事件 add)
			ufinterface.addAttribute("proc", dispatchListParameter.getProc());
			// 向ufinterface节点添加efdebug属性
			ufinterface.addAttribute("efdebug", "1");
			// 向ufinterface节点添加actions属性,入库后自动审核
			ufinterface.addAttribute("actions", "verify");
			ufinterface.addAttribute("ddate", DateUtil.getDateFormat(dispatchListParameter.getDdate()));
			// 4、生成子节点及子节点内容
			Element voucher = ufinterface.addElement("voucher");
			voucher.addAttribute("cardnumber", dispatchListParameter.getEftype());
			voucher.addAttribute("ccardname", "");
			voucher.addNamespace("z", "EF");
			Element head = voucher.addElement("head");
			Element headRow = head.addElement("z:row");
			/**以下开始构建xml参数，说明括号里面是固定值，没有的为传入变量*/
			if(StringUtils.isNotEmpty(dispatchListParameter.getCdlcode())) {
				headRow.addAttribute("cdlcode", dispatchListParameter.getCdlcode());// 出库单号（0000000001）
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCbustype())) {
				headRow.addAttribute("cbustype", dispatchListParameter.getCbustype());// 收发标志（0）
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCvouchtype())) {
				headRow.addAttribute("cvouchtype", dispatchListParameter.getCvouchtype());// 单据类型（11）
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCstcode())) {
				headRow.addAttribute("cstcode", dispatchListParameter.getCstcode());//传入参数：出库类别
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCdepcode())) {
				headRow.addAttribute("cdepcode", dispatchListParameter.getCdepcode());//传入参数：部门编码
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCsocode())) {
				headRow.addAttribute("csocode", dispatchListParameter.getCsocode());// 传入参数：仓库
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCcuscode())) {
				headRow.addAttribute("ccuscode", dispatchListParameter.getCcuscode());// 单据来源（生产订单）
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCexch_name())) {
				headRow.addAttribute("cexch_name", dispatchListParameter.getCexch_name());//业务类型（领料）
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getIexchrate())) {
				headRow.addAttribute("iexchrate", dispatchListParameter.getIexchrate());//业务类型（领料）
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCmaker())) {
				headRow.addAttribute("cmaker", dispatchListParameter.getCmaker());// 传入参数：制单人
			}
			if(dispatchListParameter.getDdate() != null) {
				headRow.addAttribute("ddate", DateUtil.getDateFormat(dispatchListParameter.getDdate()));// 传入参数：出库日期
			}
			if(dispatchListParameter.getDcreatesystime() != null) {
				headRow.addAttribute("dcreatesystime", DateUtil.getDateTimeFormat(dispatchListParameter.getDcreatesystime()));// 传入参数：制单时间
			}
			if(StringUtils.isNotEmpty(dispatchListParameter.getCverifier())) {
				headRow.addAttribute("cverifier", dispatchListParameter.getCverifier());// 传入参数：制单人
			}
			if(dispatchListParameter.getDverifydate() != null) {
				headRow.addAttribute("dverifydate", DateUtil.getDateFormat(dispatchListParameter.getDverifydate()));// 传入参数：出库日期
			}
			if(dispatchListParameter.getDverifysystime() != null) {
				headRow.addAttribute("dverifysystime", DateUtil.getDateTimeFormat(dispatchListParameter.getDverifysystime()));// 传入参数：制单时间
			}
			if(dispatchListParameter.getBreturnflag() != null) {
				headRow.addAttribute("breturnflag", dispatchListParameter.getBreturnflag());// 传入参数：制单时间
			}
			headRow.addAttribute("cDefine11", dispatchListParameter.getSettleId());// 传入参数：结算单主表ID
			headRow.addAttribute("vt_id", "71");// 传入参数：单据模板号
			Element body = voucher.addElement("body");
			int rowno = 1;
			for (DispatchListsParameter dispatchListsParameter : dispatchListParameter.getDetailsList()) {
				Element bodyRow = body.addElement("z:row");
				if(StringUtils.isNotEmpty(dispatchListsParameter.getCinvcode())){
					bodyRow.addAttribute("cinvcode", dispatchListsParameter.getCinvcode());// 传入参数：存货编码
				}
				if(StringUtils.isNotEmpty(dispatchListsParameter.getCwhcode())){
					bodyRow.addAttribute("cwhcode", dispatchListsParameter.getCwhcode());// 传入参数：批次号
				}
				if(StringUtils.isNotEmpty(dispatchListsParameter.getCgroupcode())){
					bodyRow.addAttribute("cgroupcode", dispatchListsParameter.getCgroupcode());// 传入参数：批次号
				}
				if(dispatchListsParameter.getIquantity() != null){
					bodyRow.addAttribute("iquantity", dispatchListsParameter.getIquantity().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getItaxunitprice() != null){
					bodyRow.addAttribute("itaxunitprice", dispatchListsParameter.getItaxunitprice().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getIunitprice() != null){
					bodyRow.addAttribute("iunitprice", dispatchListsParameter.getIunitprice().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getImoney() != null){
					bodyRow.addAttribute("imoney", dispatchListsParameter.getImoney().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getItax() != null){
					bodyRow.addAttribute("itax", dispatchListsParameter.getItax().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getIsum() != null){
					bodyRow.addAttribute("isum", dispatchListsParameter.getIsum().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getItaxrate() != null){
					bodyRow.addAttribute("itaxrate", dispatchListsParameter.getItaxrate().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getInatunitprice() != null){
					bodyRow.addAttribute("inatunitprice", dispatchListsParameter.getInatunitprice().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getInatmoney() != null){
					bodyRow.addAttribute("inatmoney", dispatchListsParameter.getInatmoney().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getInattax() != null){
					bodyRow.addAttribute("inattax", dispatchListsParameter.getInattax().toString());// 传入参数：数量
				}
				if(dispatchListsParameter.getInatsum() != null){
					bodyRow.addAttribute("inatsum", dispatchListsParameter.getInatsum().toString());// 传入参数：数量
				}
				if(StringUtils.isNotEmpty(dispatchListsParameter.getCsocode())){
					bodyRow.addAttribute("csocode", dispatchListsParameter.getCsocode());// 传入参数：根据mom_order表中的moid，找到mom_orderdetail的modid，再根据modid找到mom_moallocate的allocateid,然后传入
				}
				if(StringUtils.isNotEmpty(dispatchListsParameter.getIsosid())){
					bodyRow.addAttribute("isosid", dispatchListsParameter.getIsosid());// 传入参数：生产订单行号来源于mom_orderdetail
				}
				bodyRow.addAttribute("irowno", String.valueOf(rowno));// 行号
				rowno++;
			}

			OutputFormat format = OutputFormat.createPrettyPrint();
			// 设置编码格式
			format.setEncoding("UTF-8");
			return document.asXML();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
}
